package com.mexcad.db.delegate;


import java.util.ArrayList;
import java.util.List;

import javax.mail.MessagingException;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.mexcad.db.connectors.CatalogosConnector;
import com.mexcad.db.connectors.ClienteConnector;
import com.mexcad.db.connectors.ComisionistasConnector;
import com.mexcad.db.connectors.CreditoConnector;
import com.mexcad.db.connectors.EjecutivoConnector;
import com.mexcad.db.connectors.GerenteConnector;
import com.mexcad.db.connectors.IntDelegate;
import com.mexcad.db.connectors.IvaUpdate;
import com.mexcad.db.connectors.RentaBean;
import com.mexcad.db.connectors.SolicitudConnector;
import com.mexcad.db.connectors.UsuarioConnector;
import com.mexcad.db.dto.CKCliente;
import com.mexcad.db.dto.CKCredito;
import com.mexcad.db.dto.CKEjecutivo;
import com.mexcad.db.dto.CKGerente;
import com.mexcad.db.dto.CKRenta;
import com.mexcad.db.dto.CKSolicitud;
import com.mexcad.db.dto.CKUsuario;
import com.mexcad.db.dto.CargoPago;
import com.mexcad.db.dto.CatDepartamento;
import com.mexcad.db.dto.CatEsquemaCredito;
import com.mexcad.db.dto.CatEstado;
import com.mexcad.db.dto.CatMoneda;
import com.mexcad.db.dto.CatPeriodoSolicitado;
import com.mexcad.db.dto.CatReporte;
import com.mexcad.db.dto.CatServicio;
import com.mexcad.db.dto.CatTipoCliente;
import com.mexcad.db.dto.CatTipoContrato;
import com.mexcad.db.dto.CatTipoSolicitud;
import com.mexcad.db.dto.CatTipoUsuario;
import com.mexcad.db.dto.CatValor;
import com.mexcad.db.dto.Cliente;
import com.mexcad.db.dto.Comisionista;
import com.mexcad.db.dto.Credito;
import com.mexcad.db.dto.Ejecutivo;
import com.mexcad.db.dto.Gerente;
import com.mexcad.db.dto.Renta;
import com.mexcad.db.dto.ResponseValidation;
import com.mexcad.db.dto.Solicitud;
import com.mexcad.db.dto.Usuario;
import com.mexcad.db.utils.CorreoElectronico;
import com.mexcad.db.utils.ExceptionDB;
import com.mexcad.db.utils.HibernateUtil;
import com.mexcad.utils.Formatter;
import com.mexcad.utils.NumberToLetterConverter;
import com.mexcad.cripto.SHA256;


public class DelegateConnectors implements IntDelegate{
	
	public Cliente generaInstanciaCliente(){
		return new Cliente();
	}
	public CKCliente generaInstanciaFkCliente(){
		return new CKCliente();
	}
	
	public Comisionista generaInstanciaComisionista(){
		return new Comisionista();
		
	}
	
	public Usuario generaInstanciaUsuario(){
		return new Usuario();
	}
	public CKUsuario generaInstanciaFKUsuario(){
		return new CKUsuario();
	}
	
	public Gerente generaInstanciaGerente(){
		return new Gerente();
	}
	public CKGerente generaInstanciaFKGerente(){
		return new CKGerente();
	}
	
	
	public Ejecutivo generaInstanciaEjecutivo(){
		return new Ejecutivo();
	}
	public CKEjecutivo generaInstanciaFKEjecutivo(){
		return new CKEjecutivo();
	}
	public static boolean ivaUpdate(){
		return true;
	}
	
	public Solicitud generaInstanciaSolicitud(){
		return new Solicitud();
	}
	
	public CKSolicitud generaInstanciaFKSolicitud(){
		return new CKSolicitud();
		
	}
	
	public static Usuario consultaUsuario(String login, String passwd){
		return UsuarioConnector.consultarUsuario(login, passwd);
	}
	
	public static List<Cliente> getAllClientes(){
		return  ClienteConnector.getAllClientes();	
	}
	public static double getIVA(){
		return CreditoConnector.IVA;
	}
	
	public static List<Cliente> getAllClientesConGerentes(){

		return ClienteConnector.getAllClientesConGerentes();	
	}
	
	public static double getTasaBaseByCliente(int idCliente){
		return ClienteConnector.getTasaBaseByCliente(idCliente);
	}
	
	public static   Cliente getClienteById(int idCliente){
		return ClienteConnector.getClienteById(idCliente);
	}
	
	
	public static List <Cliente> getAllClientesHoja(){
		return ClienteConnector.getAllClientesHoja();
	}
	public static List <Cliente> getAllClientesHojaByEstado(int idEstado){
		return ClienteConnector.getAllClientesHojaByEstado(idEstado);
	}
	public static String getNombreCliente(int idCliente){
		return ClienteConnector.getNombreCliente(idCliente);	
	}
	
	public static List<CatEstado> getAllEstados(){
		return  ClienteConnector.getAllEstados();
	}
	
	public static int getStateCount(){
		return ClienteConnector.getStateCount();
	}
	
	public static int getStateCountByPadreAndEstado(int nodoPadre, int estado){
		return ClienteConnector.getStateCountByPadreAndEstado(nodoPadre,estado);
	}
	
	
	
	public static boolean isGerenteAssignedById(int idCliente){
		return ClienteConnector.isGerenteAssignedById(idCliente);
	}
	
	public static String getTasaBasePorId(int id) {
		return CatalogosConnector.getTasaBasePorId(id);		
	}

	
	
	
	public static List<CatTipoCliente> getAllTipoClientes(){
		return CatalogosConnector.getAllTipoClientes();
	}
	
	public static List<CatMoneda> getAllMonedas(){
		return CatalogosConnector.getAllMonedas();
	}
	
	public static CatMoneda getMonedaById(int id){
		return CatalogosConnector.getMonedaById(id);
	}
	
	public static List<CatTipoSolicitud> getAllTipoSolicitud(){
		return CatalogosConnector.getAllTipoSolicitud();
	}
	public static String getSolicitudByid(int id){
		return CatalogosConnector.getSolicitudByid(id);
	}
	public static Solicitud getSolicitudCompletaByid(int id){
		return CatalogosConnector.getSolicitudCompletaByid(id);
	}
	public static String getHTMLStringParaPresolicitud(Solicitud sol, int idCliente){
		return SolicitudConnector.getHTMLStringParaPresolicitud(sol, idCliente);
	}
	
	
	public static List<CatEsquemaCredito> getAllEsquemaCredito(){
		return CatalogosConnector.getAllEsquemaCredito();	
	}
	public static String getEsquemaCreditoByid(int id){
		return CatalogosConnector.getEsquemaCreditoByid(id);	
	}
	
	
	public static List<CatServicio> getAllServicios(){
		return CatalogosConnector.getAllServicios();
	}
	
	public static List<Usuario> getAllUsuarios(){
		return CatalogosConnector.getAllUsuarios();
	}
	public static List<CatValor> getAllValores(){
		return CatalogosConnector.getAllValores();
	}
	public static List<Cliente> getAllNodosPadre(){
		return CatalogosConnector.getAllNodosPadre();
	}
	
	public static void guardaCliente(Cliente cliente){
		 ClienteConnector.guardaCliente(cliente);
	}
	
	public static String getCurrentDateStr(){
		return com.mexcad.utils.Formatter.getDateToday();
		
	}
	
	public static List<CatDepartamento> getAllDepartamentos(){

		return CatalogosConnector.getAllDepartamentos();	
	}
	

	public static List<CatTipoUsuario> getAllTipoUsuarios() {
		return CatalogosConnector.getAllTipoUsuarios();	
	}
	
	
	
	public static List<CatTipoContrato> getAllTipoContratos() {
		return CatalogosConnector.getAllTipoContratos();
	}

	
	
	public static String getTipoContratoById(int id) {
		return CatalogosConnector.getTipoContratoById(id);
	}
	
	public static List<CatReporte> getAllReportes(){
		return CatalogosConnector.getAllReportes();
	}
	
	public static String getReporteById(int id) {
		return CatalogosConnector.getReporteById(id);
	}
	
	
	
	public static List<CatPeriodoSolicitado> getAllPeriodoSolicitado(){
		return CatalogosConnector.getAllPeriodoSolicitado();
	}
	

	public static List<CatPeriodoSolicitado> getAllPeriodoSolicitadoReport(){
		return CatalogosConnector.getAllPeriodoSolicitadoReport();
	}
	
	
	public static List<CatPeriodoSolicitado> getAllPeriodoSolicitado(int cliente){
		return CatalogosConnector.getAllPeriodoSolicitado(cliente);
	}
	
	
	public static String getPlazoSolicitadoPorId(int id){
		return CatalogosConnector.getPlazoSolicitadoPorId(id);
	}
	public static String getEstatusPorId(int id){
		return CatalogosConnector.getEstatusPorId(id);
	}
	
	public static String getEstatusCreditoRentaPorId(int id) {
		return CatalogosConnector.getEstatusCreditoRentaPorId(id);	
	}
	
	public static String codificaPasswordBase64(final String password){
		return SHA256.codificaPasswordBase64(password.toCharArray());
	}
	
	public static boolean existeUsuarioPorLogin(String login){
		return UsuarioConnector.existeUsuarioPorLogin(login);

	}
	
	public static synchronized int guardaUsuario(Usuario usuario){
		return UsuarioConnector.guardaUsuario(usuario);
		
	}

	public static synchronized void eliminaUsuario(int idUsuario){
		 UsuarioConnector.eliminaUsuario(idUsuario);
		
	}

	public static synchronized List<Gerente> getAllGerentes(){
		return  GerenteConnector.getAllGerentes();
	}
	
	public static Gerente getGerentePorCliente(int idCliente){
		return GerenteConnector.getGerentePorCliente(idCliente);
	}

	
	
	public static Gerente getGerentePorId(int idGerente){
		
		return GerenteConnector.getGerentePorId(idGerente);
	}
	

	public static synchronized int guardaGerenteActualizaCliente(Gerente gerente){
			return GerenteConnector.guardaGerenteActualizaCliente(gerente);
	}	

	
	public static synchronized int guardaGerente(Gerente gerente){
		return GerenteConnector.guardaGerente(gerente);
		
	}
	
	public static synchronized void eliminaGerente(int idGerente) {
		GerenteConnector.eliminaGerente(idGerente);
	}		
	
	public static List<Ejecutivo> getAllEjecutivos(){
		
		return  EjecutivoConnector.getAllEjecutivos();	
	}

	public static List<Ejecutivo> getEjecutivosPorCliente(int idCliente){
		return  EjecutivoConnector.getEjecutivosPorCliente(idCliente);	
	}
	
	public static Ejecutivo getEjecutivoPorId(int idEjecutivo){
		return  EjecutivoConnector.getEjecutivoPorId(idEjecutivo);	
	}
	
	
	public static synchronized int guardaEjecutivo(Ejecutivo ejecutivo){
		return  EjecutivoConnector.guardaEjecutivo(ejecutivo);
		
	}
	
	public static   int getUltimoIdEjecutivo(){
		return  EjecutivoConnector.getUltimoIdEjecutivo();
		
	}
	
	public static synchronized void eliminaEjecutivo(int idEjecutivo) {
		  EjecutivoConnector.eliminaEjecutivo(idEjecutivo);

	}	
		
	public static ResponseValidation prevalidaSolicitud(Solicitud solicitud){
		return SolicitudConnector.prevalidaSolicitud(solicitud);
	}
	

	public static List<Solicitud> getAllSolicitudes(){
		return SolicitudConnector.getAllSolicitudes();
	}

	public static List<Solicitud> getSolicitudesPorCliente(int idCliente){
		return SolicitudConnector.getSolicitudesPorCliente(idCliente);
	}
	
	public static Solicitud getSolicitudPorId(int idSolicitud){
		return SolicitudConnector.getSolicitudPorId(idSolicitud);
	}
	
	public static synchronized int guardaSolicitud(Solicitud solicitud){
		return SolicitudConnector.guardaSolicitud(solicitud);
	}

	public static synchronized int actualizaSolicitud(Solicitud solicitud){
		return SolicitudConnector.actualizaSolicitud(solicitud);
	}
	
	
	public static synchronized void eliminaSolicitud(int idSolicitud) {
		SolicitudConnector.eliminaSolicitud(idSolicitud);
	}	
	
	public static  int actualizaStatusSolicitud(Solicitud solicitud, int status){
		return SolicitudConnector.actualizaStatusSolicitud(solicitud, status);
	}

	public static synchronized void reenviarCreacionCredito(int idSolicitud) {
		SolicitudConnector.reenviarCreacionCredito(idSolicitud);
	}	
	
	
	
	public static List<Solicitud> buscarSolicitudes(String numSolicitud, String cliente,String ejecutivo ,String nombre, String aPaterno, String materno, String fechaInicial, String fechaFinal){
		return SolicitudConnector.buscarSolicitudes(numSolicitud, cliente,ejecutivo, nombre, aPaterno, materno, fechaInicial, fechaFinal);
	}
		
	public static int reenviaCotizacion(int id){
		return CorreoElectronico.enviarCotizacion(id,true);
	}
	
	public static int enviaCotizacion(int id){
		return CorreoElectronico.enviarCotizacion(id,false);
	}
	
	
	public static int enviarCotizacionConContrato(int id) {
		return CorreoElectronico.enviarCotizacionConContrato(id,false);
	}
	public static int reenviarCotizacionConContrato(int id) {
		return CorreoElectronico.enviarCotizacionConContrato(id,true);
	}

	
	public static int autorizaCredito(int id, int idUsuario) {
			return SolicitudConnector.autorizaCredito(id,idUsuario);
	}
	public static int rechazaCredito(int id) {
		return SolicitudConnector.rechazaCredito(id);
	}
	
	public static int enviaMail(String mail,String subject, String mess){
		try {
			new CorreoElectronico(mail, subject, mess).enviaCorreo();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return 0;
	}
	
	public static List<Credito> getAllCreditos(){
		return CreditoConnector.getAllCreditos();	
	}
	
	public static List<Renta> getAllRentasByCredito(int idCredito){
		return CreditoConnector.getAllRentasByCredito(idCredito);	
	}
	
	public static int consultaStatusPagoParaBorrardo(int idRenta, int idCredito){
		
		return CreditoConnector.consultaStatusPagoParaBorrardo(idRenta,idCredito);
	}
	
	public static int reversarPago(int idRenta, int idCredito){
		
		return CreditoConnector.reversarPago(idRenta,idCredito);
	}
	
	
	
	public static synchronized void eliminaCredito(int idCredito) {
		
		 CreditoConnector.eliminaCredito(idCredito);	
	}
	
	public static List<Credito> getCreditosPorCliente(int idCliente){
		
		return CreditoConnector.getCreditosPorCliente(idCliente);
	}
	
	
	public static Credito getCreditoPorId(int idCredito){
		return CreditoConnector.getCreditoPorId(idCredito);
	}
	
	public static Credito consultaCreditoNumEmpleadoRFC(int idCredito, String rfc){
		return CreditoConnector.consultaCreditoNumEmpleadoRFC(idCredito, rfc);
	}
	
	

	
	
	
	public static synchronized int guardaCreditoBySolicitud(Solicitud solicitud,int idUsuario){
	
		return CreditoConnector.guardaCreditoBySolicitud(solicitud,idUsuario);
	}
	
	public static synchronized int guardaRenta(Renta renta){
		return CreditoConnector.guardaRenta(renta);
		
	}
	
	public static synchronized int guardaCredito(Credito credito){
		
		return CreditoConnector.guardaCredito(credito);
	}
	
	public static int ejecutaProcesosCartera(int numCredito,String fecha,boolean rentas, boolean saldos,
			 boolean interesesMoratorios, boolean cancelarCreditos){
			return CreditoConnector.ejecutaProcesosCartera(numCredito, fecha, rentas, saldos, interesesMoratorios, cancelarCreditos);

	}

	public static List<Credito> buscarCreditos(String numCredito, String cliente,String ejecutivo, String nombre, String aPaterno, String materno, String fechaInicial, String fechaFinal){
		return CreditoConnector.buscarCreditos(numCredito, cliente, ejecutivo, nombre, aPaterno, materno, fechaInicial, fechaFinal);
		
	}
	
	public static List<Renta> getAllRentasSaldadasUltimaActivaByCredito(int idCredito) {
		return CreditoConnector.getAllRentasSaldadasUltimaActivaByCredito(idCredito);
	}

	public static int  consultaStatusRentaParaBorrardo(int idRenta) {
		 return CreditoConnector.consultaStatusRentaParaBorrardo(idRenta);
	}
	public static int  consultaStatusRentaConSaldo(int idRenta) {
		 return CreditoConnector.consultaStatusRentaConSaldo(idRenta);
	}
	
	public static List<CargoPago> getCargoPagoByRentaCredito(int idCredito,int idRenta){
		return CreditoConnector.getCargoPagoByRentaCredito(idCredito, idRenta);
	}
	
	public static void eliminaRenta(int idRenta) {
		 CreditoConnector.eliminaRenta(idRenta);
	}
	public static int ejecutaPagoRenta(int idRenta, double monto,String fecha ){
		return CreditoConnector.ejecutaPagoRenta(idRenta, monto,fecha);
	}
	
	public static double getMontoPagoAnticipadoByCredito( int idCredito){
		
		return CreditoConnector.getMontoPagoAnticipadoByCredito(idCredito);
	}
	public static int ejecutaPagoAnticipado(int idCredito, double monto, String fecha){
		return CreditoConnector.ejecutaPagoAnticipado(idCredito, monto, fecha);
	}
		
	public static int ejecutaAgregarCargo(int idRenta,double monto,double impuestos,String fecha){
		return CreditoConnector.ejecutaAgregarCargo(idRenta, monto, impuestos, fecha);
	}
		
	
	public static List<Comisionista> getAllComisionistas(){
		
		return ComisionistasConnector.getAllComisionistas();
	
	}
	
	public static  Comisionista getComisionistaPorId(int id){
		
		return ComisionistasConnector.getComisionistaPorId(id);
	
	}
	
	public static synchronized int guardaComisionista(Comisionista comisionista){
		return ComisionistasConnector.guardaComisionista(comisionista);
	}
	
	public static synchronized void eliminaComisionista(int idComisionista) {
		 ComisionistasConnector.eliminaComisionista(idComisionista);
	}
	
	
}